/*
 * Created on Mar 27, 2006
 *
 */
package ar.edu.utn.frba.gdaia.src.junittest.CombinarConceptos;


import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import junit.framework.Test;
import junit.framework.TestSuite;
import ar.edu.utn.frba.gdaia.src.domain.Canal;
import ar.edu.utn.frba.gdaia.src.domain.ConceptoElemental;
import ar.edu.utn.frba.gdaia.src.domain.Regla;
import ar.edu.utn.frba.gdaia.src.domain.Situacion;
import ar.edu.utn.frba.gdaia.src.main.GDAIA;
import ar.edu.utn.frba.gdaia.src.test.TestSetup;
import ar.edu.utn.frba.gdaia.src.util.ListBuilder;


/**
 * @author Fernando
 *
 */
public class TestsCombinarConceptos {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		junit.swingui.TestRunner.run(TestsCombinarConceptos.class);
	}

	/**
	 * @return a 
	 */
	public static Test suite() {
		TestSetup.main(null);
		System.out.println("Iniciando Suite de Test: Lista Corta");
		TestSuite suite = new TestSuite();
		// $JUnit-BEGIN$

		GDAIA gdaia = new GDAIA();
		gdaia.setCerebro(gdaia.generateCerebroFromXML());

		/*
		TextInterface gui = new ConcreteGUIInterface();
		gdaia.setInterfaceGUI(gui);
		Thread tgui = new Thread(new Ventana(gui));
		tgui.run();
		*/
		
		// Preparamos las variables assert a comparar
		ConceptoElemental assertConcepto1 = new ConceptoElemental(1, "210", Canal.TECLADO);
		ConceptoElemental assertConcepto2 = new ConceptoElemental(2, "211", Canal.TECLADO);
		ConceptoElemental assertConcepto3 = new ConceptoElemental(3, "228", Canal.TECLADO);
		ConceptoElemental assertConcepto4 = new ConceptoElemental(4, "240", Canal.TECLADO);
		ConceptoElemental assertConcepto5 = new ConceptoElemental(5, "230", Canal.TECLADO);
		ConceptoElemental assertConcepto6 = new ConceptoElemental(6, "212", Canal.TECLADO);
		ConceptoElemental assertConcepto7 = new ConceptoElemental(7, "229", Canal.TECLADO);
		ConceptoElemental assertConcepto8 = new ConceptoElemental(8, "243", Canal.TECLADO);
		ConceptoElemental assertConcepto9 = new ConceptoElemental(9, "214", Canal.TECLADO);
		ConceptoElemental assertConcepto10 = new ConceptoElemental(10, "231", Canal.TECLADO);

	
		// Concepto: [211, 228]
		ConceptoElemental assertConcepto11 = new ConceptoElemental(11, new ListBuilder().add(assertConcepto2).add(assertConcepto3).get(), Canal.INT_COMBINAR_CONCEPTOS);
		
		Situacion assertSituacion1 = new Situacion(new ListBuilder().add(assertConcepto1).add(assertConcepto2).add(assertConcepto3).get(), Canal.INT_MAKE_PRESENT_SIT);
		Situacion assertSituacion2 = new Situacion(new ListBuilder().add(assertConcepto4).get(), Canal.INT_MAKE_PRESENT_SIT);
		Situacion assertSituacion3 = new Situacion(new ListBuilder().add(assertConcepto1).add(assertConcepto2).add(assertConcepto3).add(assertConcepto5).add(assertConcepto6).add(assertConcepto7).get(), Canal.INT_MAKE_PRESENT_SIT);
		Situacion assertSituacion4 = new Situacion(new ListBuilder().add(assertConcepto8).get(), Canal.INT_MAKE_PRESENT_SIT);
		Situacion assertSituacion5 = new Situacion(new ListBuilder().add(assertConcepto1).add(assertConcepto9).add(assertConcepto7).add(assertConcepto10).add(assertConcepto2).add(assertConcepto3).get(), Canal.INT_MAKE_PRESENT_SIT);
		Situacion assertSituacion6 = new Situacion(new ListBuilder().add(assertConcepto8).get(), Canal.INT_MAKE_PRESENT_SIT);
		
		// Situacion: [210, [211, 228], 230, 212, 229]
		Situacion assertSituacion7 = new Situacion(new ListBuilder().add(assertConcepto1).add(assertConcepto11).add(assertConcepto5).add(assertConcepto6).add(assertConcepto7).get(), Canal.INT_MAKE_PRESENT_SIT);
		
		//Situacion: [210, 214, 229, 231, [211, 228]]
		Situacion assertSituacion8 = new Situacion(new ListBuilder().add(assertConcepto1).add(assertConcepto9).add(assertConcepto7).add(assertConcepto10).add(assertConcepto11).get(), Canal.INT_MAKE_PRESENT_SIT);		
		
		//assert de reglas para la lista corta
		Regla assertRegla1 = new Regla(-1, null, new Date(),assertSituacion1, null, assertSituacion2, Canal.INT_LERN_RULE);
		Regla assertRegla2 = new Regla(-1, null, new Date(),assertSituacion3, null, assertSituacion4, Canal.INT_LERN_RULE);
		Regla assertRegla3 = new Regla(-1, null, new Date(),assertSituacion5, null, assertSituacion6, Canal.INT_LERN_RULE);

		//Regla: [210, [211, 228], 230, 212, 229] -> [243]
		Regla assertRegla5 = new Regla(-1, null, new Date(),assertSituacion7, null, assertSituacion4, Canal.INT_COMBINAR_CONCEPTOS);
		
		//Regla: [210, 214, 229, 231, [211, 228]] -> [243]
		Regla assertRegla6 = new Regla(-1, null, new Date(),assertSituacion8, null, assertSituacion4, Canal.INT_COMBINAR_CONCEPTOS);
		
		// LearnRule: 210 211 228 -> 240
		LearnRuleCommandTest learnRuleCommandTestNew = new LearnRuleCommandTest("testExecute", gdaia, assertSituacion1, assertSituacion2, assertRegla1);
		suite.addTest(learnRuleCommandTestNew);
		
		// LearnRule: 210 211 228 230 212 229 -> 243
		learnRuleCommandTestNew = new LearnRuleCommandTest("testExecute", gdaia, assertSituacion3, assertSituacion4, assertRegla2);
		suite.addTest(learnRuleCommandTestNew);

		// LearnRule: 210 214 229 231 211 228 -> 243
		learnRuleCommandTestNew = new LearnRuleCommandTest("testExecute", gdaia, assertSituacion5, assertSituacion6, assertRegla3);
		suite.addTest(learnRuleCommandTestNew);
		
		ArrayList assertsListasCortas = new ArrayList();
		Set assertListaCorta1 = new HashSet();
		assertListaCorta1.add(assertRegla1);
		assertListaCorta1.add(assertRegla2);
		assertListaCorta1.add(assertRegla3);
		assertsListasCortas.add(assertListaCorta1);
		
		Set assertListaCorta2 = new HashSet();
		assertListaCorta2.add(null);
		assertsListasCortas.add(assertListaCorta2);
		
		Set assertListaCorta3 = new HashSet();
		assertListaCorta3.add(assertRegla2);
		assertListaCorta3.add(assertRegla5);
		assertListaCorta3.add(assertRegla3);
		assertListaCorta3.add(assertRegla6);
		assertsListasCortas.add(assertListaCorta3);
		
		assertsListasCortas.add(assertListaCorta2);
		
		assertsListasCortas.add(assertListaCorta1);
		
		assertsListasCortas.add(assertListaCorta1);
		
		assertsListasCortas.add(assertListaCorta2);
		
		Set assertListaCorta4 = new HashSet();
		assertListaCorta4.add(assertRegla1);
		assertListaCorta4.add(assertRegla2);
		assertListaCorta4.add(assertRegla3);
		assertListaCorta4.add(assertRegla5);
		assertListaCorta4.add(assertRegla6);
		assertsListasCortas.add(assertListaCorta4);
		
		assertsListasCortas.add(assertListaCorta1);
		
		assertsListasCortas.add(assertListaCorta1);
		
		assertsListasCortas.add(assertListaCorta2);
		
		assertsListasCortas.add(assertListaCorta2);
		
		assertsListasCortas.add(assertListaCorta3);
		
		assertsListasCortas.add(assertListaCorta2);
		
		assertsListasCortas.add(assertListaCorta4);
		
		assertsListasCortas.add(assertListaCorta1);

		assertsListasCortas.add(assertListaCorta1);
		
		assertsListasCortas.add(assertListaCorta2);

		ArrayList assertsReglas = new ArrayList();
		//assertsReglas.add(assertRegla4);
		assertsReglas.add(assertRegla5);
		assertsReglas.add(assertRegla6);
		
		
		CombinarConceptosCommandTest hacerListaCommandTestDormido = new CombinarConceptosCommandTest("testExecute", gdaia, assertsListasCortas, assertsReglas);
		suite.addTest(hacerListaCommandTestDormido);
	
		gdaia.generateXMLForCerebro(gdaia.getCerebro());
		System.out.println("Fin Nuevo Suite de Test");

		// $JUnit-END$
		return suite;
	}
}
